var Utils = {
	
		
	/**
	 * 将json字符串转成json对象
	 * 
	 * @param {}
	 *            jsonStr
	 * @return {}
	 */
	serialiJson : function (jsonStr) {
		return eval('(' + jsonStr + ')');
	},

	/**
	 * 动态创建json对象
	 * 
	 * @param {}
	 *            jsonObj
	 * @param {}
	 *            key
	 * @param {}
	 *            value
	 */
	createJson : function (jsonObj, key, value) {
		// 如果 value 被忽略
		if (typeof value === "undefined") {
			// 删除属性
			delete jsonObj[key];
		} else {
			// 添加 或 修改
			jsonObj[key] = value;
		}
		return jsonObj;
	},

	/**
	 * 得到url路径 /开头标识本项目路径，其他表示外部系统路径（直接返回）
	 * 
	 * @param {}
	 *            targetUrl
	 * @param {}
	 *            domain
	 * @return {}
	 */
	getUrl : function (targetUrl, domain) {
		if (!targetUrl || targetUrl == '') {
			return '';
		}
		if (/^\//.test(targetUrl)) { // 如果是/开头
			return domain + targetUrl;
		}
		return targetUrl;
	},

	// 验证手机号码合法性
	validateMobile : function (value) {
		/*var reg1 = /^13\d{9}$/;
		var reg2 = /^15[0-35-9]\d{8}$/;
		var reg3 = /^18[05-9]\d{8}$/;
		if (reg1.test(value) || reg2.test(value) || reg3.test(value)) {
			return true;
		}*/
		var reg= /^(((13[0-9]{1})|(14[0-9]{1})|(15[0-9]{1})|(17[0-9]{1})|(18[0-9]{1}))+\d{8})$/;
		if(reg.test(value)){
			return true;
		}	 
		return false;
	},

	// 验证邮箱合法性
	validateMail : function (value) {
		var reg = /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/;
		if (reg.test(value)) {
			return true;
		}
		return false;
	},

	// 验证固话合法性
	validateTel : function (value) {
		var reg = /^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/;
		if (reg.test(value)) {
			return true;
		}
		return false;
	},

	// 验证邮编合法性
	validatePostal : function (value) {
		var reg = /^[a-zA-Z0-9 ]{3,12}$/;
		if (reg.test(value)) {
			return true;
		}
		return false;
	},

	/**
	 * 时间戳转换时间
	 * @param {}tm
	 * @return {} 如：2011-3-16 16:50:43 格式
	 */
	getLocalTime : function (tm) {
		
		var tmLen = tm.toString().length;
		var timeStamp = 0;
		
		if (tmLen == 13) {
			timeStamp = parseInt(tm);
		}else if(tmLen == 10){
			timeStamp = parseInt(tm) * 1000;
		}else{
			return tm;
		}
		
		return new Date(timeStamp).toLocaleString().replace(/年|月/g, "-")
		.replace(/日/g," ").replace(/上午|中午|下午/g, "").replace(/\//g, "-");
	},
	
	/**
	 * 时间戳转换时间
	 * @param tm
	 * @return {} 如：2011-3-16 16:50:43 格式
	 */
	getLocalTimes : function(tm){
		
		var tmLen = tm.toString().length;
		var timeStamp = 0;
		
		if (tmLen == 13) {
			timeStamp = parseInt(tm);
		}else if(tmLen == 10){
			timeStamp = parseInt(tm) * 1000;
		}else{
			return tm;
		}
		
		var date = new Date(timeStamp);
		Y = date.getFullYear() + '-';
		M = (date.getMonth()+1 < 10 ? '0'+(date.getMonth()+1) : date.getMonth()+1) + '-';
		D = date.getDate() + ' ';
		h = date.getHours() + ':';
		m = date.getMinutes() + ':';
		s = date.getSeconds(); 
		
		return Y+M+D+h+m+s;
	},

	/**
	 * 时间戳转换时间
	 * @param {}tm
	 * @return {} 如：2011年3月16日 16:50:43 格式
	 */
	getLocalTimeCN : function (tm) {
		
		var tmLen = tm.toString().length;
		var timeStamp = 0;
		
		if (tmLen == 13) {
			timeStamp = parseInt(tm);
		}else if(tmLen == 10){
			timeStamp = parseInt(tm) * 1000;
		}else{
			return tm;
		}
		
		return new Date(timeStamp).toLocaleString().replace(/\//g, "-");
	},

	/**
	 * 删除重复数据
	 * @param data
	 * @returns {___anonymous2681_2684}
	 */
	uniqueArray : function (data){   
	    data = data || [];   
	        var a = {};   
	    for (var i=0; i<data.length; i++) {   
	        var v = data[i];   
	        if (typeof(a[v]) == 'undefined'){   
	            a[v] = 1;   
	        }   
	    };   
	    data.length=0;   
	    for (var i in a){   
	        data[data.length] = i;   
	    }   
	    return data;   
	},

	/*转码*/
	_encodeURI : function (data){
		return encodeURIComponent(data);
	},

	/*解码*/
	_decodeURI : function (data){
		return decodeURIComponent(data);
	},

	/*获得指定Id内容
	 */
	_getTagValueById : function (tagId){
		return $("#" + tagId).val();
	},

	/*判断是否为空*/
	isNotNull : function (value){
		return !(value == undefined || value == null || $.trim(value) == "");
	},

	/*判断是否为空*/
	isNull : function (value){
		return value == undefined || value == null || $.trim(value) == "";
	},

	/**
	 * 判断某值不是undefined
	 * @param value
	 * @returns {Boolean}
	 */
	isNotUndefined : function (value){
		return !(typeof(value) == 'undefined');
	},

	/**
	 * 判断某值是undefined
	 * @param value
	 * @returns {Boolean}
	 */
	isUndefined : function (value){
		return (typeof(value) == 'undefined');
	},

	/*-------------------------------------验证是否为函数-----------------------------------*/

	verifyFunction : function (call){
		if (typeof (call) == 'function') {
			return true;
		}
		return false;
	},

	//JS版
	//将传入数据转换为字符串,并清除字符串中非数字与.的字符
	//按数字格式补全字符串
	getFloatStr : function (num){
	    num += '';
	    num = num.replace(/[^0-9|\.]/g, ''); //清除字符串中的非数字非.字符
	    if(/^0+/) //清除字符串开头的0
	        num = num.replace(/^0+/, '');
	    if(!/\./.test(num)) //为整数字符串在末尾添加.00
	        num += '.00';
	    if(/^\./.test(num)) //字符以.开头时,在开头添加0
	        num = '0' + num;
	    num += '00';        //在字符串末尾补零
	    num = num.match(/\d+\.\d{2}/)[0];
	    return num;
	},


	//* 名　　称：DataLength 
	//* 功    能：计算数据的长度 
	//* 入口参数：fData：需要计算的数据 
	//* 出口参数：返回fData的长度(Unicode长度为2，非Unicode长度为1) 
	dataLength : function (fData) {
	    var intLength=0 
	    for (var i=0;i<fData.length;i++) {
	        if ((fData.charCodeAt(i) < 0) || (fData.charCodeAt(i) > 255)) 
	            intLength=intLength+2 
	        else 
	            intLength=intLength+1    
	    } 
	    return intLength 
	}, 

	//获取contextpat
	getContextPath : function () {
		var pathName = document.location.pathname;
		var index = pathName.substr(1).indexOf("/");
		var result = pathName.substr(0,index+1);
		return result;
	},

	/**
	 * 格式化数值为指定位数的小数
	 * @param v 值
	 * @param bit 指定的位数(20以内)
	 */
	toFormatDecimal : function( v,bit ){
		
		if( Utils.isNotNull(v) && !isNaN(v) && bit < 20 ){
			var vJia = new Number( (v*1)+1 ).toFixed( bit );  
			var vJian = new Number( vJia-1 ).toFixed( bit );
			return vJian;
		}else{
			return '';
		}
	},
	
	/**
	 * 转换URL 加时间戳
	 * @param url
	 * @returns {String}
	 */
	setTimeStamp : function( url ){
		return url + '&timestamp='+new Date().getTime();
	},
	
	/**
	 * 生成时间戳
	 * @param url
	 * @returns {String}
	 */
	getTimeStamp : function(){
		return new Date().getTime();
	},
	
	/**
	 * AJAX请求公用方法
	 * @param url 后台请求地址
	 * @param data 参数
	 * @param dataType 请求类型
	 * @param asyncFlag false 同步加载,true异步加载
	 * @param map index
	 * @param callBack
	 * @param errorBack
	 */
	doRequestAjax : function(url,data,dataType,asyncFlag,callBack, errorBack) {
		
		$.ajax({
			type : 'post',
			cache : false,// 从页面缓存获取加载信息
			async : asyncFlag,
			dataType : dataType,
			url : common.encode(url),
			data : data,
			error : function(XMLHttpRequest, textStatus, errorThrown) {
				if (common.verifyFunction(errorBack)) {
					errorBack(data,XMLHttpRequest, textStatus, errorThrown);
				}
			},
			success : function(data) {
				if (common.verifyFunction(callBack)) {
					/*if( data.code == 9999 ){
						window.location.href="login";
					}else{
						callBack(data);
					}*/
					/*if( data.code == 9999 ){
						alert(data.message);
					}else{
						callBack(data);
					}*/
					callBack(data);
				}
			}
		});
	},
	
	/**
	 * 不足3位时，高位用0补 
	 * @param v
	 * @returns {String}
	 */
	toThreeBitFormat : function(v) {
		while ( v.toString().length < 3 ) {
			v = "0" + v;
		}
		return v;
	},
	
	/**
	 * 获取图片URL地址
	 * @param imgDomain 图片服务器域名
	 * @param id 图片ID
	 * @param suffix 图片格式后缀
	 * @returns {String} 返回完整URL
	 */
	getImgUrl: function( imgDomain,id,suffix ) {
		
		if( Utils.isNotNull(id) ){
			
			var id_125 = Utils.toThreeBitFormat(id % 125);
			var id_255 = Utils.toThreeBitFormat(id % 255);
			var id_199 = Utils.toThreeBitFormat(id % 199);
			
			return imgDomain + id_125 + "/" + id_255 + "/" + id_199 + "/" + id + "-" + suffix + ".jpg";
		}else{
			return 'image/no_pic/no_pic_60.png';
		}
	},
	/**
	 * timestmap转为string类型
	 * @param time
	 * @returns {String}
	 */
	getTimestampString : function (time){
	    var datetime = new Date();
	    datetime.setTime(time);
	    console.log(datetime);
	    var year = datetime.getFullYear();
	    var month = datetime.getMonth() + 1 < 10 ? "0" + (datetime.getMonth() + 1) : datetime.getMonth() + 1;
	    var date = datetime.getDate() < 10 ? "0" + datetime.getDate() : datetime.getDate();
	    var hour = datetime.getHours()< 10 ? "0" + datetime.getHours() : datetime.getHours();
	    var minute = datetime.getMinutes()< 10 ? "0" + datetime.getMinutes() : datetime.getMinutes();
	    var second = datetime.getSeconds()< 10 ? "0" + datetime.getSeconds() : datetime.getSeconds();
	    return year.toString() + "-" + month.toString() + "-" + date.toString()+" "+hour.toString()+":"+minute.toString()+":"+second.toString();
	},
	
	/**
	 * 时间戳转换时间
	 * 
	 * @param {}
	 *            tm
	 * @return {} 如：2011-3-16 16:50:43 格式
	 */
	getLocalTime: function(tm) {
		var tt;
		if (tm.toString().length == 13) {
			tt = new Date(parseInt(tm)).toLocaleString().replace(/年|月/g, "-")
					.replace(/日/g, " ").replace(/\//g, "-");

		} else {
			tt = new Date(parseInt(tm) * 1000).replace(/年|月/g, "-").replace(/日/g,
					" ").replace(/\//g, "-");
		}
		return tt;
	},
	
	/**
	 * Date 转为 string类型
	 */
	getDateString : function(time){
	    var datetime = new Date();
	    datetime.setTime(time);
	    var year = datetime.getFullYear();
	    var month = datetime.getMonth() + 1 < 10 ? "0" + (datetime.getMonth() + 1) : datetime.getMonth() + 1;
	    var date = datetime.getDate() < 10 ? "0" + datetime.getDate() : datetime.getDate();
	    return year + "-" + month + "-" + date;
	},
	
	/**
	 * 加载链接
	 * 
	 * @param href 链接
	 */
	 
	 
	loadUrl : function(url){
		location.hash=url;
		$("#mainContent").load(url);

	},


	loadHtml : function(href) {
		loadUrl(href);
	},

	loadHtmlParams : function(href, params) {
		loadUrl(href + "?" + params)
	},


	loadUrlHash : function(){
		var href = location.hash.replace("#", ""); 
			if(href)loadUrl(href);
	},
}

/**
 * 对Date的扩展，将 Date 转化为指定格式的串
 * @param fmt
 * @return 将date类型转换为yyyy-MM-dd 或者 yyyy-MM-dd hh:ss:mm形式
 */
Date.prototype.Format = function (fmt) {
	
	var o = {
		"M+": this.getMonth() + 1, //月份 
		"d+": this.getDate(), //日 
		"h+": this.getHours(), //小时 
		"m+": this.getMinutes(), //分 
		"s+": this.getSeconds(), //秒 
		"q+": Math.floor((this.getMonth() + 3) / 3), //季度 
		"S": this.getMilliseconds() //毫秒 
	};
	
	if (/(y+)/.test(fmt)) {
		fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
	}
	
	for (var k in o){
		if (new RegExp("(" + k + ")").test(fmt)) {
			fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
		}
	}
	
	return fmt;
}

String.prototype.trim = function(){     
	return this.replace(/(^\s*)|(\s*$)/g, "");     
};


/**
 * @param msg
 * @param type error  info  success
 */
function showMsg(msg,type){
	$.globalMessenger().post ({
		message: msg,
		type: type,
		showCloseButton: true
	})
}

/**
 * 获取截止时间
 * @param startDate
 * @param days
 * @returns
 */
function getEndDate(startDate,month){
	var startDate = new Date(startDate);
	console.log(startDate);
	startDate.setMonth(startDate.getMonth()+month);
	console.log(startDate);
	return startDate.Format('yyyy-MM-dd');
}

function   DateAdd(interval,number,startDate)  
{  
/* 
  *   功能:实现VBScript的DateAdd功能. 
  *   参数:interval,字符串表达式，表示要添加的时间间隔. 
  *   参数:number,数值表达式，表示要添加的时间间隔的个数. 
  *   参数:date,时间对象. 
  *   返回:新的时间对象. 
  *   var   now   =   new   Date(); 
  *   var   newDate   =   DateAdd( "d ",5,now); 
  *---------------   DateAdd(interval,number,date)   ----------------- 
  */  
		var date = new Date(startDate);
        switch(interval)  
        {  
                case   "y"   :   {  
                        date.setFullYear(date.getFullYear()+number);  
                        return   date;  
                        break;  
                }  
                case   "q"   :   {  
                        date.setMonth(date.getMonth()+number*3);  
                        return   date;  
                        break;  
                }  
                case   "m"   :   {  
                        date.setMonth(date.getMonth()+number);  
                        return   date;  
                        break;  
                }  
                case   "w"   :   {  
                        date.setDate(date.getDate()+number*7);  
                        return   date;  
                        break;  
                }  
                case   "d"   :   {  
                        date.setDate(date.getDate()+number);  
                        return   date;  
                        break;  
                }  
                case   "h"   :   {  
                        date.setHours(date.getHours()+number);  
                        return   date;  
                        break;  
                }  
                case   "m"   :   {  
                        date.setMinutes(date.getMinutes()+number);  
                        return   date;  
                        break;  
                }  
                case   "s"   :   {  
                        date.setSeconds(date.getSeconds()+number);  
                        return   date;  
                        break;  
                }  
                default   :   {  
                        return   '';  
                        break;  
                }  
        }  
}  
